dhcpv4: update dhcpv4_msg_to_string()
authorDavid Härdeman <[email protected]>
Wed, 24 Sep 2025 14:08:35 +0000 (16:08 +0200)
committerÁlvaro Fernández Rojas <[email protected]>
Tue, 7 Oct 2025 09:02:10 +0000 (11:02 +0200)
Simplify and make it cover all currently known message types.

Signed-off-by: David Härdeman <[email protected]>
Link: https://github.com/openwrt/odhcpd/pull/266
Signed-off-by: Álvaro Fernández Rojas <[email protected]>
src/dhcpv4.c
src/dhcpv4.h

index 25fcdb6c22f71fa8bb6f5c894b7b0fb7d09f94ba..2dd4b3a205631332396afa75c8946c3ea9dc858b 100644 (file)
@@ -105,30 +105,32 @@ static bool leases_require_fr(struct interface *iface, struct odhcpd_ipaddr *add
        return fr_ip ? true : false;
 }
 
-static char *dhcpv4_msg_to_string(uint8_t reqmsg)
+static const char *dhcpv4_msg_to_string(uint8_t reqmsg)
 {
-       switch (reqmsg) {
-       case (DHCPV4_MSG_DISCOVER):
-               return "DHCPV4_MSG_DISCOVER";
-       case (DHCPV4_MSG_OFFER):
-               return "DHCPV4_MSG_OFFER";
-       case (DHCPV4_MSG_REQUEST):
-               return "DHCPV4_MSG_REQUEST";
-       case (DHCPV4_MSG_DECLINE):
-               return "DHCPV4_MSG_DECLINE";
-       case (DHCPV4_MSG_ACK):
-               return "DHCPV4_MSG_ACK";
-       case (DHCPV4_MSG_NAK):
-               return "DHCPV4_MSG_NAK";
-       case (DHCPV4_MSG_RELEASE):
-               return "DHCPV4_MSG_RELEASE";
-       case (DHCPV4_MSG_INFORM):
-               return "DHCPV4_MSG_INFORM";
-       case (DHCPV4_MSG_FORCERENEW):
-               return "DHCPV4_MSG_FORCERENEW";
-       default:
+       static const char *dhcpv4_msg_names[] = {
+               [DHCPV4_MSG_DISCOVER]           = "DHCPV4_MSG_DISCOVER",
+               [DHCPV4_MSG_OFFER]              = "DHCPV4_MSG_OFFER",
+               [DHCPV4_MSG_REQUEST]            = "DHCPV4_MSG_REQUEST",
+               [DHCPV4_MSG_DECLINE]            = "DHCPV4_MSG_DECLINE",
+               [DHCPV4_MSG_ACK]                = "DHCPV4_MSG_ACK",
+               [DHCPV4_MSG_NAK]                = "DHCPV4_MSG_NAK",
+               [DHCPV4_MSG_RELEASE]            = "DHCPV4_MSG_RELEASE",
+               [DHCPV4_MSG_INFORM]             = "DHCPV4_MSG_INFORM",
+               [DHCPV4_MSG_FORCERENEW]         = "DHCPV4_MSG_FORCERENEW",
+               [DHCPV4_MSG_LEASEQUERY]         = "DHCPV4_MSG_LEASEQUERY",
+               [DHCPV4_MSG_LEASEUNASSIGNED]    = "DHCPV4_MSG_LEASEUNASSIGNED",
+               [DHCPV4_MSG_LEASEUNKNOWN]       = "DHCPV4_MSG_LEASEUNKNOWN",
+               [DHCPV4_MSG_LEASEACTIVE]        = "DHCPV4_MSG_LEASEACTIVE",
+               [DHCPV4_MSG_BULKLEASEQUERY]     = "DHCPV4_MSG_BULKLEASEQUERY",
+               [DHCPV4_MSG_LEASEQUERYDONE]     = "DHCPV4_MSG_LEASEQUERYDONE",
+               [DHCPV4_MSG_ACTIVELEASEQUERY]   = "DHCPV4_MSG_ACTIVELEASEQUERY",
+               [DHCPV4_MSG_LEASEQUERYSTATUS]   = "DHCPV4_MSG_LEASEQUERYSTATUS",
+               [DHCPV4_MSG_TLS]                = "DHCPV4_MSG_TLS",
+       };
+
+       if (reqmsg >= ARRAY_SIZE(dhcpv4_msg_names))
                return "UNKNOWN";
-       }
+       return dhcpv4_msg_names[reqmsg];
 }
 
 static void dhcpv4_put(struct dhcpv4_message *msg, uint8_t **cookie,
index d54aedbfb39687857fbc77877788463e9f4e23d8..dd3fc51288d39af0d680f63b5486d7aceb0dc9f0 100644 (file)
@@ -29,16 +29,26 @@ enum dhcpv4_op {
        DHCPV4_BOOTREPLY = 2
 };
 
+// https://www.iana.org/assignments/bootp-dhcp-parameters/bootp-dhcp-parameters.xhtml#message-type-53
 enum dhcpv4_msg {
-       DHCPV4_MSG_DISCOVER = 1,
-       DHCPV4_MSG_OFFER = 2,
-       DHCPV4_MSG_REQUEST = 3,
-       DHCPV4_MSG_DECLINE = 4,
-       DHCPV4_MSG_ACK = 5,
-       DHCPV4_MSG_NAK = 6,
-       DHCPV4_MSG_RELEASE = 7,
-       DHCPV4_MSG_INFORM = 8,
-       DHCPV4_MSG_FORCERENEW = 9,
+       DHCPV4_MSG_DISCOVER             = 1,     // RFC2132
+       DHCPV4_MSG_OFFER                = 2,     // RFC2132
+       DHCPV4_MSG_REQUEST              = 3,     // RFC2132
+       DHCPV4_MSG_DECLINE              = 4,     // RFC2132
+       DHCPV4_MSG_ACK                  = 5,     // RFC2132
+       DHCPV4_MSG_NAK                  = 6,     // RFC2132
+       DHCPV4_MSG_RELEASE              = 7,     // RFC2132
+       DHCPV4_MSG_INFORM               = 8,     // RFC2132
+       DHCPV4_MSG_FORCERENEW           = 9,     // RFC3203
+       DHCPV4_MSG_LEASEQUERY           = 10,    // RFC4388
+       DHCPV4_MSG_LEASEUNASSIGNED      = 11,    // RFC4388
+       DHCPV4_MSG_LEASEUNKNOWN         = 12,    // RFC4388
+       DHCPV4_MSG_LEASEACTIVE          = 13,    // RFC4388
+       DHCPV4_MSG_BULKLEASEQUERY       = 14,    // RFC6926
+       DHCPV4_MSG_LEASEQUERYDONE       = 15,    // RFC6926
+       DHCPV4_MSG_ACTIVELEASEQUERY     = 16,    // RFC7724
+       DHCPV4_MSG_LEASEQUERYSTATUS     = 17,    // RFC7724
+       DHCPV4_MSG_TLS                  = 18,    // RFC7724
 };
 
 enum dhcpv4_opt {